#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define Buffer_size 64
//argc:命令行参数的个数
//argv:命令行参数名称
int main(int argc,char *argv[])
{   
    
    if(argc!=3)
    {
        printf("param num is invaild\n");
        exit(-1);
    }
    const char* srcFile=argv[1];
    int dstMode=0;
    /*判断原文件是否具备写权限*/
    int ret=access(srcFile,R_OK);
    if(ret==0)
    {
        printf("srcFile read permission.\n");
        dstMode |=R_OK;
    }

    /*判断原文件是否具备读权限*/
    ret=access(srcFile,W_OK);
    if(ret==0)
    {
        printf("srcFile write permission.\n");
        dstMode |=W_OK;
    }
    /*判断原文件是否具备执行权限*/
    ret=access(srcFile,X_OK);
    if(ret==0)
    {
        printf("srcFile x permission.\n");
        dstMode |=X_OK;
    }

    const char* dstFile=argv[2];

    /*判断文件是否存在*/
     ret=access(srcFile,F_OK);
    if(ret==-1)
    {
        printf("src file open error:\n");
        exit(-1);
    }


    int srcFd=open(srcFile,O_RDONLY);
    if(srcFd==-1)
    {
        printf("src file open error:");
        exit(-1);
    }
    /*程序走到这个地方：意味着原文件存在的*/
    //打开目的文件，和源文件具有相同的权限
    int dstFd=open(dstFile,O_WRONLY|O_CREAT,dstMode);
    if(dstFd==-1)
    {
        printf("det file open error:\n"); 
        exit(-1);
    }
    char buffer[Buffer_size]={0};
    int readByte=0;
    while(1)
    {
        /*读到的字节数*/
       readByte=read(srcFd,buffer,Buffer_size-1);
        if((readByte<Buffer_size-1)||(readByte==0))
        {
            write(dstFd,buffer,readByte);
            break;
        }
        write(dstFd,buffer,readByte);
        /*清除脏数据*/
        memset(buffer,0,sizeof(buffer));
    }
    /*关闭文件*/
    close(srcFd);
    close(dstFd);

    return 0;
}

